Valid word abbreviation

Time: O(N); Space: O(1); easy

Given a non-empty string word and an abbreviation abbr, return whether the string matches with the given abbreviation.

A string such as “word” contains only the following valid abbreviations:

[“word”, “1ord”, “w1rd”, “wo1d”, “wor1”, “2rd”, “w2d”, “wo2”, “1o1d”, “1or1”, “w1r1”, “1o2”, “2r1”, “3d”, “w3”, “4”]

Example 1:

Input: word = “internationalization”, abbr = “i12iz4n”

Output: True

Example 2:

Input: word = “apple”, abbr = “a2e”

Output: False

[1]:
class Solution1(object):
    def validWordAbbreviation(self, word, abbr):
        """
        :type word: str
        :type abbr: str
        :rtype: bool
        """
        i , digit = 0, 0
        for c in abbr:
            if c.isdigit():
                if digit == 0 and c == '0':
                    return False
                digit *= 10
                digit += int(c)
            else:
                if digit:
                    i += digit
                    digit = 0
                if i >= len(word) or word[i] != c:
                    return False
                i += 1
        if digit:
            i += digit

        return i == len(word)
[2]:
s = Solution1()
word = "internationalization"
abbr = "i12iz4n"
assert s.validWordAbbreviation(word, abbr) == True
word = "apple"
abbr = "a2e"
assert s.validWordAbbreviation(word, abbr) == False